package com.powernode.dispatch.controller;

import com.powernode.common.result.Result;
import com.powernode.dispatch.service.NewOrderService;
import com.powernode.model.vo.dispatch.NewOrderTaskVo;
import com.powernode.model.vo.order.NewOrderDataVo;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 配送员新订单控制器
 * 提供与配送员新订单相关的RESTful API接口
 */
@Slf4j
@Tag(name = "配送员新订单接口管理")
@RestController
@RequestMapping("/dispatch/newOrder")
@SuppressWarnings({"unchecked", "rawtypes"})
public class NewOrderController {
    @Resource
    private NewOrderService newOrderService; // 自动注入NewOrderService服务层组件

    /**
     * 添加定时任务并启动
     * @param newOrderTaskVo 新订单任务参数对象，通过RequestBody接收JSON格式数据
     * @return 统一响应对象，包含任务ID
     * @Operation Swagger/OpenAPI注解，用于API文档中描述接口功能
     */
    @Operation(summary = "添加定时任务并启动")  // 接口摘要说明
    @PostMapping("/addAndStartTask")  // HTTP POST请求，路径为/dispatch/newOrder/addAndStartTask
    public Result<Long> addAndStartTask(@RequestBody NewOrderTaskVo newOrderTaskVo) {
        // 调用服务层方法处理业务逻辑，并将结果包装成统一响应对象返回
        return Result.ok(newOrderService.addAndStartTask(newOrderTaskVo));
    }

    /**
     * 查询配送员新订单数据
     * @param driverId 配送员ID，通过URL路径参数传递
     * @return 统一响应对象，包含新订单数据列表
     */
    @Operation(summary = "查询配送员新订单数据")  // 接口摘要说明
    @GetMapping("/findNewOrderQueueData/{driverId}")  // HTTP GET请求，路径包含配送员ID作为路径变量
    public Result<List<NewOrderDataVo>> findNewOrderQueueData(@PathVariable Long driverId) {
        // 调用服务层方法查询数据，并将结果包装成统一响应对象返回
        return Result.ok(newOrderService.findNewOrderQueueData(driverId));
    }

    /**
     * 清空配送员订单队列数据
     * @param driverId 配送员ID，通过URL路径参数传递
     * @return 统一响应对象，包含操作结果（布尔值）
     */
    @Operation(summary = "清空配送员订单队列数据")  // 接口摘要说明
    @GetMapping("/clearNewOrderQueueData/{driverId}")  // HTTP GET请求，路径包含配送员ID作为路径变量
    public Result<Boolean> clearNewOrderQueueData(@PathVariable Long driverId) {
        // 调用服务层方法清除数据，并将结果包装成统一响应对象返回
        return Result.ok(newOrderService.clearNewOrderQueueData(driverId));
    }
}

